home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1997-01-30 | 6.6 KB | 243 lines |
- 10 'CALTODAY - 28 APR 89 rev. 30 DEC 97
- 20 'Adapted from "How to Program Your IBM PC", by Carl Shipman
- 30 'Published by Knight-Ridder Press ISBN:0-89586-544-0
- 40 'Library of Congress Catalog No. 83-81692
- 50 '
- 60 IF EX$=""THEN EX$="EXIT"
- 70 COMMON EX$
- 80 CLS:KEY OFF
- 90 COLOR 7,0,1
- 100 '
- 110 DIM LKUP$(12,2)
- 120 UL$=STRING$(80,205)
- 130 RESTORE
- 140 DATA JANUARY,31,FEBRUARY,28,MARCH,31,APRIL,30,MAY,31,JUNE,30
- 150 DATA JULY,31,AUGUST,31,SEPTEMBER,30,OCTOBER,31,NOVEMBER,30,DECEMBER,31
- 160 FOR J=1 TO 12:FOR K=1 TO 2
- 170 READ LKUP$(J,K)
- 180 NEXT K:NEXT J
- 190 '
- 200 LIN=-11 'base line no.
- 210 FOR ABC=1 TO 3
- 220 IF ABC=1 THEN MGN=24 'left margin - this month
- 230 IF ABC=2 THEN MGN=4 'left margin - last month
- 240 IF ABC=3 THEN MGN=44 'left margin - next month
- 250 Z$=DATE$ 'current date
- 260 '
- 270 MNUM%=VAL(LEFT$(DATE$,2)) 'current month no.
- 280 IF ABC=1 THEN 320
- 290 IF ABC=2 THEN MNUM%=MNUM%-1 'last month no.
- 300 IF ABC=3 THEN MNUM%=MNUM%+1 'next month no.
- 310 '
- 320 DAY%=VAL(MID$(DATE$,4,2)) 'current day no.
- 330 IF ABC=2 THEN DAY%=1
- 340 '
- 350 Y#=VAL(RIGHT$(DATE$,4)) 'current year no.
- 360 IF MNUM%>12 THEN MNUM%=1:Y#=Y#+1 'next month no. next year
- 370 IF MNUM%<1 THEN MNUM%=12:Y#=Y#-1 'last month no. last year
- 380 IF Q$<>""THEN 620
- 390 '
- 400 '.....start
- 410 PRINT " Press number in < > for:
- 420 PRINT UL$;
- 430 PRINT " < 1 > Current 3 months"
- 440 PRINT " < 2 > Any month of any year after 1752"
- 450 PRINT " < 3 > 12 month calendar for any year after 1752"
- 460 PRINT " < 4 > Count days between dates"
- 470 PRINT UL$;
- 480 PRINT " < 0 > EXIT"
- 490 Q$=INKEY$
- 500 IF Q$="0"THEN CLS:RUN EX$
- 510 IF Q$="1"THEN CLS:GOTO 620
- 520 IF Q$="2"THEN CLS:GOTO 570
- 530 IF Q$="3"THEN CLS:GOTO 1410
- 540 IF Q$="4"THEN CLS:CHAIN"DAYS"
- 550 GOTO 490
- 560 '
- 570 INPUT " ENTER: Year.............";Y#
- 580 IF Y#<1753 THEN 2210
- 590 INPUT " ENTER: Month number.....";MNUM%
- 600 CLS
- 610 '
- 620 '.....look up data
- 630 COLOR 7,0,0
- 640 M$=LKUP$(MNUM%,1) 'month name
- 650 MY$=M$+STR$(Y#) 'month, year
- 660 ND%=VAL(LKUP$(MNUM%,2)) 'number of days in month
- 670 '
- 680 '....calculate calendar
- 690 FLEAP%=0 'flag
- 700 IF Y# MOD 400=0 THEN 730 'leap year
- 710 IF Y# MOD 100=0 THEN 750 'not leap year
- 720 IF Y# MOD 4<>0 THEN 750 'not leap year
- 730 FLEAP%=1:IF ND%=28 THEN ND%=29 'add day to Feb.if leap year
- 740 '....get days in prior years
- 750 YDAYS=365*Y#+INT((Y#-1)/4)-INT(0.75*(INT((Y#-1)/100)+1))
- 760 '....add days in prior months this year
- 770 MDAYS=0
- 780 FOR I=1 TO MNUM%-1:MDAYS=MDAYS+VAL(LKUP$(I,2)):NEXT I
- 790 '....add 1st day, this month
- 800 DAYS=YDAYS+MDAYS+1
- 810 '....if leap year add leap day
- 820 IF FLEAP%=1 AND MNUM%>2 THEN DAYS=DAYS+1
- 830 DW%=DAYS+INT(-DAYS/7)*7+6: 'calculate dayweek factor
- 840 '
- 850 '....display calendar
- 860 IF ABC=3 THEN LIN=1
- 870 LIN=LIN+12
- 880 COLOR 0,7
- 890 LOCATE LIN,MGN-1
- 900 PRINT CHR$(221); 'left border
- 910 LOCATE LIN,MGN
- 920 PRINT SPC(35);CHR$(222) 'background & right border
- 930 T=INT((35-LEN(MY$))/2)
- 940 LOCATE LIN,MGN+T
- 950 PRINT MY$
- 960 LOCATE LIN+1,MGN-1
- 970 COLOR 0,7:PRINT CHR$(221); 'left border
- 980 COLOR 10,12
- 990 PRINT " SUN MON TUE WED THU FRI SAT ";
- 1000 COLOR 0,7:PRINT CHR$(222) 'right border
- 1010 CS%=1 'counts spaces
- 1020 '
- 1030 '.....blank background
- 1040 FOR Z=LIN+2 TO LIN+8
- 1050 LOCATE Z,MGN-1:COLOR 0,7:PRINT CHR$(221);
- 1060 COLOR 0,6:PRINT SPC(35);
- 1070 COLOR 0,7:PRINT CHR$(222)
- 1080 NEXT Z
- 1090 '
- 1100 '.....print days
- 1110 FOR R%=LIN+2 TO LIN+8 'row
- 1120 FOR C%=1 TO 31 STEP 5 'column
- 1130 CD%=CS%-DW%
- 1140 IF ABC=2 OR ABC=3 THEN 1170
- 1150 IF Q$="2"THEN COLOR 15,6:GOTO 1170
- 1160 IF CD%=DAY% THEN COLOR 15,3 ELSE COLOR 15,6 'hi-lite today's date
- 1170 '....CD%=dates, ND%=days in month
- 1180 IF CD%<1 OR CD%>ND% THEN 1240 'bad dates
- 1190 CD$=STR$(CD%)
- 1200 IF LEN(CD$)<3 THEN CD$=" "+CD$
- 1210 CD$=CD$+" "
- 1220 IF ABC=2 OR ABC=3 THEN COLOR 15,6
- 1230 LOCATE R%,C%+MGN:PRINT CD$
- 1240 CS%=CS%+1
- 1250 NEXT C%
- 1260 NEXT R%
- 1270 COLOR 0,7
- 1280 LOCATE LIN+8,MGN-1
- 1290 PRINT CHR$(221); 'left border
- 1300 PRINT SPC(35);CHR$(222) 'background & right border
- 1310 IF Q$="2"THEN COLOR 7,0:GOTO 1390 'single month display
- 1320 IF ABC=1 THEN MO$="THIS"
- 1330 IF ABC=2 THEN MO$="LAST"
- 1340 IF ABC=3 THEN MO$="NEXT"
- 1350 LOCATE CSRLIN-1,MGN+13
- 1360 PRINT MO$;" MONTH"
- 1370 COLOR 7,0
- 1380 NEXT ABC
- 1390 GOTO 2180 'screen dump
- 1400 '
- 1410 '.....12 month calendar
- 1420 CLS
- 1430 INPUT " ENTER: Year (yyyy).........";Y$
- 1440 IF VAL(Y$)<1753 THEN 2210
- 1450 IF LEN(Y$)<>4 THEN 1430
- 1460 Y%=VAL(Y$)
- 1470 CLS
- 1480 '
- 1490 '....calculate calendar
- 1500 FOR MON=1 TO 12:MNUM%=MON 'month number
- 1510 M$=LKUP$(MNUM%,1) 'month name
- 1520 MY$=M$+STR$(Y%) 'month, year
- 1530 ND%=VAL(LKUP$(MNUM%,2)) 'number of days in month
- 1540 FLEAP%=0: 'flag
- 1550 IF Y% MOD 400=0 THEN 1580 'leap year
- 1560 IF Y% MOD 100=0 THEN 1610 'not leap year
- 1570 IF Y% MOD 4<>0 THEN 1610 'not leap year
- 1580 FLEAP%=1: IF ND%=28 THEN ND%=29 'add day to Feb.if leap year
- 1590 '
- 1600 '....get days in prior years
- 1610 YDAYS=365*Y%+INT((Y%-1)/4)-INT(0.75*(INT((Y%-1)/100)+1))
- 1620 '
- 1630 '....add days in prior months this year
- 1640 MDAYS=0
- 1650 FOR I=1 TO MNUM%-1
- 1660 MDAYS=MDAYS+VAL(LKUP$(I,2))
- 1670 NEXT I
- 1680 '
- 1690 '....add 1st day, this month
- 1700 DAYS=YDAYS+MDAYS+1
- 1710 '
- 1720 '....if leap year add leap day
- 1730 IF FLEAP%=1 AND MNUM%>2 THEN DAYS=DAYS+1
- 1740 DW%=DAYS+INT(-DAYS/7)*7+6: 'calculate dayweek factor
- 1750 '
- 1760 '....display calendar
- 1770 DATA 1,5,1,30,1,55
- 1780 DATA 9,5,9,30,9,55
- 1790 DATA 17,5,17,30,17,55
- 1800 DATA 1,5,1,30,1,55
- 1810 READ LIN,COL
- 1820 COLOR 0,7
- 1830 LOCATE LIN,COL
- 1840 PRINT SPC(22)
- 1850 T=INT((22-LEN(MY$))/2)
- 1860 LOCATE LIN,COL+T
- 1870 PRINT MY$
- 1880 COLOR 10,12
- 1890 LOCATE LIN+1,COL
- 1900 PRINT " SU MO TU WE TH FR SA ";
- 1910 CS%=1 'counts spaces
- 1920 '
- 1930 COLOR 0,1
- 1940 FOR BGC=2 TO 7
- 1950 LOCATE LIN+BGC,COL
- 1960 PRINT SPC(22) 'B/G colour
- 1970 NEXT BGC
- 1980 '
- 1990 FOR R%=LIN+2 TO LIN+8
- 2000 FOR C%=COL+1 TO COL+21 STEP 3 'column
- 2010 CD%=CS%-DW%
- 2020 '.....CD%=DATES, ND%=DAYS IN MONTH
- 2030 IF CD%<1 OR CD%>ND% THEN 2100 'bad dates
- 2040 CD$=STR$(CD%)
- 2050 CD$=RIGHT$(CD$,LEN(CD$)-1) 'remove blank space
- 2060 IF LEN(CD$)<2 THEN CD$=" "+CD$
- 2070 LOCATE R%,C%
- 2080 COLOR 15,1
- 2090 PRINT CD$;
- 2100 CS%=CS%+1
- 2110 NEXT C%
- 2120 LN=LN+1
- 2130 IF LN=63 THEN COLOR 7,0:GOSUB 2300:CLS:LN=0:GOTO 2140
- 2140 NEXT R%
- 2150 COLOR 7,0:NEXT MON
- 2160 GOTO 2180
- 2170 '
- 2180 '.....end
- 2190 GOSUB 2300:CLS:Q$="":GOTO 200
- 2200 '
- 2210 '.....year before 1753
- 2220 BEEP:PRINT
- 2230 PRINT " Cannot calculate years earlier than 1753,"
- 2240 PRINT " when the Georgian Calendar was adopted."
- 2250 PRINT
- 2260 PRINT " Press any key to start over......."
- 2270 IF INKEY$=""THEN 2270
- 2280 CLS:GOTO 200
- 2290 '
- 2300 'HARDCOPY
- 2310 GOSUB 2420:LOCATE 25,2:COLOR 14,6
- 2320 PRINT " Press 1 to print screen, 2 to print screen & ";
- 2330 PRINT "advance paper, or 3 to continue.";:COLOR 7,0
- 2340 Z$=INKEY$:IF Z$="3"THEN GOSUB 2420:RETURN
- 2350 IF Z$="1"OR Z$="2"THEN GOSUB 2420:GOTO 2370
- 2360 GOTO 2340
- 2370 FOR QX=1 TO 24:FOR QY=1 TO 80
- 2380 LPRINT CHR$(SCREEN(QX,QY));
- 2390 NEXT QY:NEXT QX
- 2400 IF Z$="2"THEN LPRINT CHR$(12)
- 2410 GOTO 2310
- 2420 LOCATE 25,1:PRINT STRING$(80,32);:RETURN
-